const Model = require('../models/iptable')
const Area = require('../models/iparea')

// TODO: 此文件中最好返回 Promise。通过 .exec() 可以返回 Promise。
// 需要注意的是 分页插件本身返回的就是 Promise 因此 Model.paginate 不需要 exec()。
// Model.create 返回的也是 Promise

//查找全部
exports.findAll = () => Model.find().populate('area').sort({vlan: 1}).exec();

//查找多个 带query查询条件的 筛选 分页查询
exports.findSome = (data) => {

  const {page = 1, limit = 10, sort = "vlan"} = data;
  const query = {};
 // 基于area数组匹配查询
  if (data['area']) {
    query.area = {'$all':data['area']}
  }
 //基于vlan匹配查询
if (data['vlan']) {
    query.vlan = {'$all':data['vlan']}
  }

  const keyword = data.query //从URL中传来的 keyword参数
  const reg = new RegExp(keyword, 'i') //不区分大小写
  let vlan = undefined
  if(keyword) {
    vlan = Number(keyword)
     if(isNaN(vlan)) vlan = undefined
  }

  query['$or'] = [
    {name:{$regex:reg}},
    // {vlan:vlan},
    {'ips.ip':{$regex:reg}},
    {'ips.name':{$regex:reg}},
    {ip:{$regex:reg}},
    // {parameter:{$regex:reg}},
    {beizhu:{$regex:reg}},
  ];
  const options = {
    page: parseInt(page, 10),
    limit: parseInt(limit, 10),
    populate:'area',
    sort,
  };


  const result = Model.paginate(query, options);
  return result;
};

//查找单个 详情
exports.finById = (id) => Model.findById(id).exec();

/**
 * 增加
 */
exports.add = (data) => Model.create(data);

/**
 * 更新
 */
exports.update = (data) => {
  const {id, ...restData} = data;
  return Model.findOneAndUpdate({_id: id}, {
      ...restData,
    },
    {
      new: true, // 返回修改后的数据
    }).exec();
};

/**
 * 删除
 */
exports.delete = (id) => Model.findByIdAndDelete(id).exec();
